100 REM FUNCTION KEY EDITOR 110 REM COPYRIGHT (C) 1987 120 REM JOHN M. CAMPBELL 130 REM ALL RIGHTS RESERVED 140 PRINT "DEFINE FUNCTION KEYS" 150 FOR I=1TO8:DF$(I)=CHR$(222):NEXTI 160 BA=51000:AD=BA 170 A0=PEEK(655):A1=PEEK(656) 180 IF BA+27<>A0+256*A1 THEN 220 190 PRINT "FUNCTION KEYS ALREADY DEFINED" 200 PRINT "TYPE STOP+RESTORE KEYS THEN RE-RUN" 210 GOTO 910 220 PRINT "LOADING ML PROGRAM INTO MEMORY" 230 FOR I=1TO82 240 READ A 250 POKE AD,A 260 AD=AD+1 270 NEXT I 280 REM ADDRESS-DEPENDENT CODE 290 VH=((BA+25)/256)AND255:VL=(BA+25)-256*VH 300 POKE BA+5,VL 310 POKE BA+6,VH 320 WH=((BA+26)/256)AND255:WL=(BA+26)-256*WH 330 POKE BA+11,WL 340 POKE BA+12,WH 350 SH=((BA+27)/256)AND255:SL=(BA+27)-256*VH 360 POKE BA+14,SL 370 POKE BA+19,SH 380 IH=((BA+71)/256)AND255:IL=(BA+71)-256*IH 390 POKE BA+53,IL 400 POKE BA+54,IH 410 TH=((BA+82)/256)AND255:TL=(BA+82)-256*TH 420 POKE BA+58,TL 430 POKE BA+59,TH 440 POKE BA+72,VL 450 POKE BA+73,VH 460 GOSUB 1310:REM CHECK FOR DEFAULT FILE 470 FK=0:GOSUB 1740:RW=20:CL=0:GOSUB 1680 480 FK=0:INPUT"NUMBER OF KEY TO DEFINE";FK 490 GOSUB 1780 500 IF FK=0 THEN 620 510 IF FK<0 OR FK>8 THEN PRINT "INVALID FUNCTION KEY NUMBER":GOTO 470 520 REM PROMPT FOR STRING 530 A$=DF$(FK):IF A$="" THEN A$=CHR$(222) 540 GOSUB 1740:RW=20:CL=0:GOSUB 1680 550 PRINT "NEW STRING (DEF="+A$+")? "; 560 GOSUB 1010:REM PROCESS INPUTS 570 RW=8+FK:CL=21:GOSUB 1680 580 PRINT " " 590 RW=8+FK:CL=21:GOSUB 1680 600 PRINT DF$(FK) 610 GOTO 470 620 REM END PROCESSING 630 PRINT "WRITING FN KEY DEFINITIONS INTO MEMORY" 640 FOR I=1TO8 650 LL=LEN(DF$(I)) 660 FOR J=1TO11 670 IF J=LL+1 THEN A=0:GOTO 720 680 IF J>LL THEN A=32:GOTO 720 690 A=ASC(MID$(DF$(I),J,1)) 700 IF A=95 THEN A=13 710 IF A=222 THEN A=0:LL=0 720 POKE AD,A:AD=AD+1 730 NEXT J 740 NEXT I 750 INPUT "CREATE DEFAULT FILE (Y/N)";A$ 760 IF A$<>"Y" THEN 880 770 PRINT#15,"S0:FN DEFS" 780 OPEN 3,8,3,"0:FN DEFS,S,W" 790 INPUT#15,EN,EM$,ET,ES 800 IF EN<>0 THEN PRINT "UNABLE TO CREATE DEFAULT FILE":GOTO 860 810 PRINT "WRITING DEFAULT VALUES" 820 FOR I=1TO8 830 PRINT#3,DF$(I) 840 REM PRINT "FN KEY";I;"=";DF$(I) 850 NEXTI 860 CLOSE3 870 GOSUB 1540 880 PRINT "ACTIVATING FUNCTION KEYS" 890 SYS BA 900 CLOSE15 910 END 920 DATA 120,173,143,2,141,0,0,173,144,2 930 DATA 141,0,0,169,0,141,143,2,169,0 940 DATA 141,144,2,88,96,0,0,166,203 950 DATA 228,197,240,38,224,3,144,34 960 DATA 224,7,176,30,173,141,2,106 970 DATA 144,5,138,24,105,4,170,188,0,0 980 DATA 162,0,185,0,0,240,9,230,198 990 DATA 157,119,2,232,200,208,242 1000 DATA 108,0,0,66,0,22,44,77,11,33,55 1010 REM GET INPUT STRING 1020 LL=0:AA$="":CS=0:PRINT CHR$(114); 1030 POKE 212,0:REM QUOTE MODE OFF 1040 GET A$:A=ASC(A$+CHR$(0)):IF A=0 THEN GOSUB 1260:GOTO 1040 1050 IF A=20 AND LL=0 THEN 1040 1060 IF A=13 THEN PRINT CHR$(157)CHR$(32):GOTO 1240 1070 IF A<>20 THEN 1130 1080 REM PROCESS DELETE 1090 LL=LL-1 1100 AA$=MID$(AA$,1,LL) 1110 PRINT CHR$(157)CHR$(32)CHR$(157)A$CHR$(114);:CS=1 1120 GOTO 1040 1130 IF LL=10 THEN 1230 1140 REM ADD CHARACTER TO STRING 1150 AA$=AA$+A$ 1160 LL=LL+1 1170 PRINT CHR$(157)CHR$(32)CHR$(157)A$CHR$(114);:CS=1 1180 IF A=34 THEN POKE 212,0 1190 IF A<>222 THEN 1040 1200 REM NULL STRING 1210 PRINT CHR$(157)CHR$(32):PRINT"FN KEY DEFINITION DELETED" 1220 GOTO 1240 1230 PRINT CHR$(157)CHR$(32):PRINT "EXCEEDED 10-CHARACTER MAXIMUM" 1240 IF LL<>0 THEN DF$(FK)=AA$ 1250 RETURN 1260 REM CURSOR CONTROL 1270 IF CS=0 THEN PRINT CHR$(157)CHR$(114); 1280 IF CS=10 THEN CS=-10:PRINT CHR$(157)CHR$(32); 1290 CS=CS+1 1300 RETURN 1310 REM OPEN FILE AND READ DEFAULTS 1320 PRINT "SEARCHING FOR DEFAULT FILE" 1330 OPEN 15,8,15,"I" 1340 OPEN 2,8,2,"0:FN DEFS,S,R" 1350 INPUT#15,EN,EM$,ET,ES 1360 IF EN<>0 THEN PRINT "NO DEFAULT DEFINITIONS FOUND":GOTO 1520 1370 PRINT "READING DEFAULT VALUES" 1380 FOR I=1TO8 1390 DF$(I)="" 1400 GET#2,A$ 1410 IF A$=CHR$(13) THEN 1440 1420 DF$(I)=DF$(I)+A$ 1430 GOTO 1400 1440 NEXT I 1450 PRINT CHR$(147) 1460 RW=5:CL=10:GOSUB 1680 1470 PRINT "FUNCTION KEY EDITOR" 1480 FOR I=1 TO 8 1490 RW=8+I:CL=10:GOSUB 1680 1500 PRINT "FN KEY";I;"= ";DF$(I) 1510 NEXT I 1520 CLOSE 2 1530 RETURN 1540 REM STORE LOAD FILE 1550 PRINT#15,"S0:FN KEYS" 1560 INPUT#15,EN,EM$,ET,ES 1570 OPEN 2,8,1,"0:FN KEYS,P,W" 1580 INPUT#15,EN,EM$,ET,ES 1590 BH=(BA/256)AND255 1600 BL=BA-256*BH 1610 PRINT#2,CHR$(BL); 1620 PRINT#2,CHR$(BH); 1630 FOR I=0TO168 1640 PRINT#2,CHR$(PEEK(BA+I)); 1650 NEXTI 1660 CLOSE2 1670 RETURN 1680 REM SET CURSOR TO (RW,CL) 1690 POKE 781,RW 1700 POKE 782,CL 1710 POKE 783,0 1720 SYS 65520 : REM CALL KERNAL PLOT ROUTINE 1730 RETURN 1740 REM CLEAR PROMPT LINE 1750 RW=20:CL=0:GOSUB 1680 1760 PRINT " " 1770 RETURN 1780 REM CLEAR MESSAGE LINE 1790 RW=21:CL=0:GOSUB 1680 1800 PRINT " " 1810 RW=22:CL=0:GOSUB 1680 1820 PRINT " " 1830 RW=22:CL=0:GOSUB 1680 1840 RETURN